package com.tsy.server.control.service;

import com.tsy.server.control.model.dto.JwtAclDTO;
import com.tsy.server.control.model.param.DrcConnectParam;
import com.tsy.server.control.model.param.DrcModeParam;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;

/**
 * @author sean
 * @version 1.3
 * @date 2023/1/11
 */
public interface IDrcService {

    /**
     * 在 Redis 中保存机场的 DRC 模式。
     * @param dockSn 机场序列号
     * @param clientId 客户端ID
     */
    void setDrcModeInRedis(String dockSn, String clientId);

    /**
     * 查询当前控制该机场的客户端。
     * @param dockSn 机场序列号
     * @return clientId 客户端ID
     */
    String getDrcModeInRedis(String dockSn);

    /**
     * 删除 Redis 中的机场 DRC 模式。
     * @param dockSn 机场序列号
     * @return
     */
    Boolean delDrcModeInRedis(String dockSn);

    /**
     * 为控制端提供 MQTT 连接参数。
     * @param workspaceId 工作空间ID
     * @param userId 用户ID
     * @param username 用户名
     * @param param 连接参数
     * @return
     */
    DrcModeMqttBroker userDrcAuth(String workspaceId, String userId, String username, DrcConnectParam param);

    /**
     * 让机场进入 DRC 模式，并授予相关权限。
     * @param workspaceId 工作空间ID
     * @param param 模式参数
     * @return
     */
    JwtAclDTO deviceDrcEnter(String workspaceId, DrcModeParam param);

    /**
     * 让机场退出 DRC 模式。
     * @param workspaceId 工作空间ID
     * @param param 模式参数
     */
    void deviceDrcExit(String workspaceId, DrcModeParam param);
}
